微型計算機的始祖:Altair 8800
《 大眾電子 》的訂閱者們是個複雜的群體,該雜誌的編輯 Arthur Salsberg 不得不在 1974 年 12 月刊 中的前言部分指出這點。此前,雜誌編輯組曾收到了對《如何搭建家庭媒體中心》文章的抱怨,稱這篇文章激勵了許多業餘電視愛好者走出去,削弱了專業修理人員存在的必要性,這對許多人的電視造成了極大傷害。Salsberg 認為,這個擔憂的產生可能是因為大家不清楚《大眾電子》讀者們的真實水平。他解釋道,據雜誌內部調查的數據顯示,52% 的訂閱者都是某方面的電子專家,並且其中的 150,000 人在最近 60 天之內都修過電視。此外,訂閱者們平均在電子產品上花費了 470 美金(2018 年則是 3578 美金),並且他們擁有萬用表、真空管伏特計、電子管測試儀、晶體管測試儀、射頻訊號產生器和示波器等必要設備。「《大眾電子》的讀者們並不全都是新手。」Salsberg 總結道。
熟悉《大眾電子》的人居然會質疑它的訂閱者,這令我十分吃驚。不過最近 60 天我的確沒修過電視。我的電腦對我來說就是一塊鋁,我甚至沒把它拆開看過。1974 年 12 月的《大眾電子》刊登的像《駐波比是什麼以及如何處理它》和《對萬用表的測試》之類的特色文章,甚至連廣告都令人生畏。它們中有個看起來像某種立體聲系統的東西大膽地寫道「除了『四通道單元(即內建的 SQ、RM 和 CD-4 解碼接收器)』,沒有任何音頻設備是值得期待的」。這也表明了《大眾電子》的訂閱者一定對電子有很多深入的了解。
不過在 1975 年 1 月刊 中,該雜誌為讀者們帶來了一些他們從沒見過的東西。在標題「突破性項目」下面,雜誌的封面是一個大大的黑灰色盒子,其前面板上有一組複雜開關和燈。這便是 Altair 8800,「世界上首個有商業競爭力的小型機」,它的售價低於 400 美元。儘管 Altair 被宣傳作「 小型機 」,但它實際上是首個商業上成功的新型計算機成員,它首先被稱為「 微型計算機 」,最終被稱為 PC( 個人計算機 )。Altair 十分小巧而且很便宜,以至於它成為了當時家家戶戶都能用起的電腦。正如 Salsberg 所寫道,它在《大眾電子》上的出現意味著:「家用電腦的時代終於到來了。」
此前,我曾寫過 關於 Altair 的文章,但我覺得 Altair 值得重新審視。與當時其它的計算機相比,它並不是一台性能強勁的計算機(儘管它的成本要低得多),它也不是首個採用微處理器的通用計算機(在它之前已經至少有三個基於微處理器的計算機)。但是 Altair 是一種可供我們所有人使用的計算機。它是歷史上我們所擁有的設備中首台流行的計算機,而早於 Altair 計算機都是完全不同的機器,那些大型機和笨重的迷你計算機由穿孔卡編程並且很少與之直接交互。不過 Altair 也是台極其簡單的計算機,它沒有附帶任何操作系統甚至是引導程序。除非你為它購買外圍設備,否則 Altair 就是一台裝配了 RAM、前面板只有一組開關和燈泡的機器。由於 Altair 操作簡單,使得重新理解基本的計算概念都成了十分簡單的事情,正如模擬信號時代的人們第一次接觸到數字設備一樣。
Roberts 和他的公司
Altair 是由一家名為 微型儀器和遙測系統 (MITS)的公司所設計製造,這家公司位於美國新墨西哥州的阿爾布開克。MITS 由一個叫 H. Edward Roberts 的人經營。在進入計算器市場之前,該公司已經開始製造模型火箭的遙測系統,該市場在 20 世紀 70 年代初期蓬勃發展。集成電路大大降低了計算器的成本,突然之間它就成了美國每個在職的專業人士的必需品。不幸的是,由於計算器市場競爭過於激烈,到了 1974 年初,MITS 便負債纍纍。
1974 年在計算機界是 奇蹟迭出的一年 。 1 一月的時候,惠普公司推出了世界首個可編程的手持計算器 HP-65。四月的時候,Intel 發布了 Intel 8080,這是他們的第二款 8 位微處理器,它也是首款廣受歡迎的微處理器。接著,六月的時候,《 無線電電子 》雜誌宣傳了一台名為 Mark-8 的自製小型計算機,它使用了 Intel 在 1972 年推出的 Intel 8008 微處理器。Mark-8 是有史以來使用微處理器搭建的第三台電腦,它的首次登場是在雜誌的封面上。 2 Mark-8 在《無線電電子》上的出現促使了《大眾電子》尋找他們要自己宣傳的小型機項目。
《大眾電子》的訂閱者們其實早在 1974 年 12 月就通過郵件獲得了 1975 年 1 月刊的刊物。 3 所以 Altair 的宣布為這個 奇蹟迭出的一年 畫上了圓滿的句號。Altair 的出現是十分重要的,因為此前從未有過向公眾提供的價格公道而又功能齊全的電腦。當時,作為最受歡迎的小型計算機之一的 PDP-8 要幾千美金才能買到。然而作為 Altair 核心的 Intel 8080 晶元幾乎能與 PDP-8 匹敵,甚至更強;8080 支持更廣泛的指令集,而且 Altair 可以擴展到 64 kb 內存,顯然強於僅有 4 kb 內存的 PDP-8。並且,Mark-8 也不是它的對手,因為它搭載的是只能處理 16 kb 內存的 Intel 8008。在 Mark-8 必須由用戶按照說明書在印刷電路板上手動拼裝的情況下,Altair 在購買時就已經被組裝好了(不過由於後來 MITS 被大量訂單淹沒,最後真正能獲得 Altair 的方式也只有買套件拼裝了)。
對許多《大眾電子》的讀者來說,Altair 是他們了解數字計算的起點。1975 年 1 月刊上那篇介紹 Altair 的文章由 Roberts 和 Altair 的共同設計師 William Yates 所寫。Roberts 和 Yates 煞費苦心地用電工和無線電狂熱者們所熟悉的辭彙來介紹了數字硬體和計算機編程的基本概念。他們寫道:「一台計算機其實由一塊可變的硬體。僅需修改儲存於內存之中的位組合形式,便可改變硬體設備的種類。」同時,Roberts 和 Yates 認為編程的基本概念是「足夠簡單並能在較短時間內掌握,但是想要成為一個高效的程序員必須經驗豐富且富有創造力。」對此我十分認同。儘管該部分已經完全組裝好了,文章仍包含了用來講解 Intel 8080 的組成電路的詳細圖表。文章解釋了 CPU 和計算機內存單元的區別,堆棧指針的用法,和彙編語言以及更高級的語言(例如 FORTRAN 和 BASIC)比起手動輸入機器碼所帶來的巨大優勢。
其實,《大眾電子》在 1975 年 1 月刊之前就出版過 Roberts 撰寫的系列文章。這一系列作為短期課程被收錄在「數字邏輯」專欄中。在 1974 年 12 月刊中,Roberts 為讀者們帶來了關於構建「超低成本計算機終端」的文章,文章中介紹了可以用於 8 位電腦中輸入值的八進位鍵盤。在介紹這個鍵盤時,Roberts 解釋了晶體管到晶體管的邏輯工作原理,以及關於構建一種可以「記住」數字值的觸發器的方法。Roberts 承諾說,這個鍵盤可以在下個月即將公布的 Altair 電腦中使用。
有多少《大眾電子》的讀者製作了這個鍵盤我們無從得知,但是那個鍵盤的確是個很有用的東西。如果沒有鍵盤和其它輸入設備,我們只能通過撥動 Altair 面板上的開關來輸入值。Altair 的前面板上有一行 16 個開關被用來設置地址,而下方的 8 個則是用來操作計算機的。一行 16 個開關中最右邊的 8 個開關也能用來指定要儲存在內存中的值。這麼做不無道理,因為 Intel 8080 使用 16 位的值來定址 8 位的字。而前面板的這 16 個開關每一個都代表了一個位,當開關向上時代表 1,向下則代表 0。用這樣的方式與計算機交互是個啟示(一會兒我們就會講到),因為 Altair 的面板是真正的二進位界面。這使得你可以儘可能地接觸到計算機實體。
儘管在當下 Altair 的界面對我們來說完全不像是人用的,不過在那個時代卻並不罕見。比如 PDP-8 的面板上有個類似的但更漂亮的二進位輸入裝置,而且它被塗上了吸引人的黃色和橙色,不過講真,它真的應該捲土重來。然而 PDP-8 經常與紙帶閱讀器或電傳打字機配合使用,這使得程序輸入更加容易。這些 I/O 設備價格高昂,這意味著 Altair 的用戶們大都會被那個前面板攔住。正如你可能想像的那樣,通過這一堆開關輸入一個大型程序是個苦差事。不過幸運的是,Altair 可以與盒式記錄器連接,這樣一來載入程序就不是什麼難事了。Bill Gates 和 Paul Allen 在 MITS 的授權下為 Altair 編寫了一個 BASIC 語言版本,並在 1975 年中期發行,這成為了微軟有史以來的首次商業嘗試。此後,那些買得起電傳打字機的用戶就能 通過紙帶來將 BASIC 載入 Altair 了,並能使得用戶能夠通過文字與 Altair 交互。之後,BASIC 便成為了學生們最愛的入門編程語言,並成了早期小型機時代的標準介面。
z80pack
多虧了網路上一些人,特別是 Udo Munk 的努力,你可以在你的計算機上運行 Altair 的模擬器。這個模擬器是在 Zilog Z80 CPU 的虛擬套件上構建的,這個 CPU 可以運行 Intel 8080 的軟體。Altair 模擬器允許你像 Altair 的早期用戶們一樣撥動前面板上的開關。儘管點擊這些開關的感覺不如撥動真實開關的觸覺,但是使用 Altair 模擬器仍是一個能讓你感受二進位人機交互效率有多低的途徑,至少在我看來這非常簡明直觀。
z80pack 是 Udo Munk 開發的 Z80 模擬器套件,你可以在 z80pack 的官網上找到它的下載鏈接。我在 上一篇介紹 Altair 的文章中 寫到過在 macOS 上使用它的詳細過程。如果你能編譯 FrontPanel 庫和 altairsim
可執行程序,你應該能直接運行 altairsim
並看到這個窗口:
在新版的 z80pack 中(比如我正在使用的 1.36 版本),你可以使用一個叫 Tarbell boot ROM 的功能,我覺得這是用來載入磁碟鏡像的。經我測試,這意味著你不能寫入到 RAM 中的前幾個字。在編輯 /altairsim/conf/system.conf
之後,你可以構建帶有一個 16 頁 RAM 且沒有 ROM 或引導載入器的 Altair。除此之外,你還可以用這個配置文件來擴大運行模擬器的窗口大小,不得不說這還是挺方便的。
Altair 的面板看起來令人生畏,不過事實上並沒有我們想像中的這麼可怕。Altair 說明書 對解釋開關和指示燈起到了很大的作用,這個 YouTube 視頻 也是如此。若想輸入和運行一個簡易的程序,你只需要了解一點點東西。Altair 右上方標籤為 D0 到 D7 的指示燈代表當前定址的字的內容。標籤為 A0 到 A15 的指示燈表示當前的地址。地址指示燈下的 16 個開關可以用來設置新地址;當 「EXAMINE」 開關被向上推動時,數據指示燈才會更新以顯示新地址上的內容。用這個功能,你便能「觀察」到內存中所有的信息了。你也可以將 「EXAMINE」 推下來「EXAMINE NEXT」位置,以自動檢查下一個位置上的信息,這使得查看連續的信息更容易了。
要將位組合方式保存到內存信息中,請使用最右邊的 8 個標籤為 0 到 7 的開關。然後,請向上推動 「DEPOSIT」 按鈕。
在《大眾電子》 的 1975 年 2 月刊 中,Roberts 和 Yates 引導用戶輸入一小段程序來確保他們的 Altair 正常工作。這個程序從內存中讀取兩個整型數據並相加之後將和存回內存中。這個小程序僅由 6 條指令組成,但是這 6 條指令涉及了 14 個字的內存,所以要正確地輸入它們需要一點時間。這個示常式序也被寫入了 Altair 的說明書,原文如下:
Address | Mnemonic | Bit Pattern | Octal Equivalent |
---|---|---|---|
0 | LDA | 00 111 010 | 0 7 2 |
1 | (address) | 10 000 000 | 2 0 0 |
2 | (address) | 00 000 000 | 0 0 0 |
3 | MOV B, A | 01 000 111 | 1 0 7 |
4 | LDA | 00 111 010 | 0 7 2 |
5 | (address) | 10 000 001 | 2 0 1 |
6 | (address) | 00 000 000 | 0 0 0 |
7 | ADD B | 10 000 000 | 2 0 0 |
8 | STA | 00 110 010 | 0 6 2 |
9 | (address) | 10 000 010 | 2 0 2 |
10 | (address) | 00 000 000 | 0 0 0 |
11 | JMP | 11 000 011 | 3 0 3 |
12 | (address) | 00 000 000 | 0 0 0 |
13 | (address) | 00 000 000 | 0 0 0 |
如果你通過開關來將上表的這些值輸入到 Altair,最終會得到一個程序,它會讀取內存 128 中的值,並將其與 129 中的值相加,最終將其保存至 130 中。伴隨每條取一個地址的指令的地址,它們最開始會給出最低有效位,這便是第二個位元組總會被清零的原因了(沒有高於 255 的地址)。在輸入這個程序並在 128 和 129 中輸入了一些值之後,你可以向下短暫推動 「RUN」 ,之後再將它推到 「STOP」 位置。因為程序循環執行,以一秒內執行上千次的速度反覆地添加並保存那些值。並且最後得到的值總是相同的,如果你停止該程序並查看 130 的內容,你應該能找到正確答案。
我不知道普通的 Altair 用戶是否使用過彙編程序,不過 z80pack 包括了一個:z80asm
,意思是 適用於 Z80 的彙編程序 ,所以它使用了一組不同的助記符。不過因為 Z80 是被設計來兼容為 Intel 8080 寫的軟體的,所以即使助記符不一樣,它們的操作碼也是相同的。你可以直接將 z80asm
彙編碼裝載進 Altair:
ORG 0000H
START: LD A,(80H) ;Load from address 128.
LD B,A ;Move loaded value from accumulator (A) to reg B.
LD A,(81H) ;Load from address 129.
ADD A,B ;Add A and B.
LD (82H),A ;Store A at address 130.
JP START ;Jump to start.
編譯之後,你可以調用彙編程序來將其轉換為 Intel HEX 文件:
$ ./z80asm -fh -oadd.hex add.asm
我們用帶有 h
參數的 -f
標識來定義輸出的 HEX 文件。你可以用 -x
標識來傳遞 HEX 文件,從而使得 Altair 能夠載入該程序:
$ ./altairsim -x add.hex
這會在內存中自動設置前 14 個字,就和你通過開關手動輸入這些值一樣。你可以直接使用 「RUN」 按鈕來替代以前那些繁瑣的步驟,這是如此的簡單!
我不覺得有很多 Altair 用戶以這種方式來編寫軟體。Altair BASIC 發布後,使得 BASIC 成為了 Altair 編程最簡單的方法。z80pack 同時也包括了一些不同版本 Altair BASIC 的 HEX 文件;在模擬器中,你可以用這個方式載入 4.0 版本的 4K BASIC:
$ ./altairsim -x basic4k40.hex
當你開啟模擬器並按下 「RUN」 按鈕之後,你就會看到 BASIC 開始執行了,同時它會在終端中與你交互。它首先會提示你輸入你的內存可用量,我們輸入 4000 位元組。隨後,在顯示 「OK」 提示符之前,它會問你幾個問題,Gates 和 Allen 用這個「OK」來代替標準的 「READY」 並以此節省內存。在這之後,你便可以使用 BASIC 了:
OK
PRINT 3 + 4
7
雖然運行 BASIC 只有 4kb 的內存並沒有給你足夠的空間,但你可以看到它是如何從使用前面板邁出了重要的一步。
很顯然,Altair 遠不及如今的家用電腦和筆記本電腦,並且比它晚十多年發布的 Mac 電腦看上去也是對這個簡樸的 Altair 電腦的巨大飛躍。但是對第一批購買並親手組裝了 Altair 的《大眾電子》的讀者們來說,Altair 才是他們擁有的第一個真正的全功能電腦,而這一切只用了 400 美金低價和一半的書櫃空間。對那時只能用 一疊卡片 或一卷磁帶來與計算機交互的人們來說,Altair 是個令人眼前一亮的玩意。這之後的微型計算機基本都是在對 Altair 改進,使得它更易用。從某種意義上來說,它們只是更複雜的 Altair。Altair,一個野獸派的極簡作品,卻為之後的許多微型計算機打下了鋪墊。
如果你覺得這篇文章寫的不錯,你可以在推特上關注 @TwoBitHistory 或訂閱 RSS feed 來獲得我們文章的更新提醒。文章每兩周就會更新一次!
- Paul E. Ceruzzi, A History of Modern Computing (Cambridge, Mass: MIT Press, 2003), 226. ↩
- 「Mark-8 Minicomputer,」 Byran』s Old Computers, accessed July 21, 2018, http://bytecollector.com/mark_8.htm. ↩
- Paul E. Ceruzzi, A History of Modern Computing (Cambridge, Mass: MIT Press, 2003), 226. ↩
via: https://twobithistory.org/2018/07/22/dawn-of-the-microcomputer.html
作者:Sinclair Target 選題:lujun9972 譯者:zhs852 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive